package controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.util.Iterator;
import java.util.List;
import javax.swing.table.DefaultTableModel;

import modelo.Buscador;
import modelo.Proveedor;
import modelo.ProveedorDao;
import vista.InterfazGraficaBuscarProveedor;
import vista.Mensaje;

public class ControladorBuscarProveedor extends WindowAdapter implements ActionListener,MouseListener
{
	 private InterfazGraficaBuscarProveedor interfazGrafica;
	 private Buscador controlador;
	 private DefaultTableModel modeloTabla;
	 
	 public ControladorBuscarProveedor(Buscador listener)
	 {
	    	interfazGrafica= new InterfazGraficaBuscarProveedor(listener.getVentana());
	    	controlador= listener;
	    	modeloTabla= new DefaultTableModel();
	    	
	    	interfazGrafica.addListener((WindowListener) this);
	    	interfazGrafica.addListener((MouseListener) this);
	    	interfazGrafica.addListener((ActionListener) this);
	    	
	    	interfazGrafica.visualizarVentana();
	 }
	 
	 private void cargarTabla()
	 {
	    	try
	    	{
	    	  List<Proveedor> listaProveedores = new ProveedorDao().consultarProveedoresActivos();
	    	  Object[] encabezados= {"Codigo Proveedor","Nombre Proveedor"};
	    	  
	    	  Object[][] data= new Object[listaProveedores.size()][encabezados.length];
	    	  
	    	  int i= 0;
	    	  
	    	  Iterator<Proveedor> iterador= listaProveedores.iterator();
	    	  Proveedor proveedor= null;
	    	  
	    	  while (iterador.hasNext())
	    	  {
	    		  proveedor= iterador.next();
	    		  
	    		  data[i][0]= proveedor.getCodProveedor();
	    		  data[i][1]= proveedor.getNombre();
	    		  
	    		  ++i;
	    	  }
	    	  
	    	  modeloTabla= new ModeloTabla(data,encabezados);
	    	  
	    	  
	    	}
	    	catch(Exception e)
	    	{
	    		Mensaje.mostrarError("Error cargando tabla");
	    		modeloTabla= new DefaultTableModel();
	    	}
	    	
	    	interfazGrafica.asignarDatosTabla(modeloTabla);
	  }
	    
	    
		@Override
		public void actionPerformed(ActionEvent e) 
		{
			if (e.getActionCommand().equalsIgnoreCase("ACEPTAR"))
			{
				controlador.asignarElementoBuscado(interfazGrafica.getCodigo());
				interfazGrafica.descargarMemoria();
			}
			else if (e.getActionCommand().equalsIgnoreCase("CANCELAR"))
			{
				controlador.asignarElementoBuscado("");
				interfazGrafica.descargarMemoria();
			}
			
		}

		


		@Override
		public void mouseClicked(MouseEvent arg0) 
		{
			int indiceSeleccionado= interfazGrafica.getFilaSeleccionada();
			
			if (indiceSeleccionado!=-1 && (modeloTabla instanceof ModeloTabla))
			{
				interfazGrafica.asignarCodigo((String) modeloTabla.getValueAt(indiceSeleccionado, 0));
				interfazGrafica.asignarNombre((String) modeloTabla.getValueAt(indiceSeleccionado, 1));
			}
			
		}

		@Override
		public void mouseEntered(MouseEvent arg0) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void mouseExited(MouseEvent arg0) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void mousePressed(MouseEvent arg0) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void mouseReleased(MouseEvent arg0) {
			// TODO Auto-generated method stub
			
		}
		
		public void windowClosing(WindowEvent evt)
		{
			controlador.asignarElementoBuscado("");
			interfazGrafica.descargarMemoria();
		}
		
		public void windowOpened(WindowEvent evt)
		{
			
			cargarTabla();
		}
		
		class ModeloTabla extends DefaultTableModel
		{
			ModeloTabla(Object data[][],Object[] encabezados)
			{
				super(data,encabezados);
			}
			
			 public boolean isCellEditable(int row,int col)
			 {
			        return false;
			 }
		}


}
